package com.stars.module.menu.controller;

import com.stars.base.entity.CommonDTO;
import com.stars.base.entity.Result;
import com.stars.base.exception.BaseException;
import com.stars.module.menu.entity.StarMenuVo;
import com.stars.module.menu.service.StarMenuService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;

/**
 * @author : Rocks
 * @version : 1.0
 * @date : 2022/11/7 19:18
 * @description : 菜单控制器
 */
@Slf4j
@RestController
@RequestMapping("/starMenu")
public class StarMenuController {

    private final StarMenuService menuService;

    public StarMenuController(StarMenuService menuService) {
        this.menuService = menuService;
    }

    /**
     * 保存菜单操作
     * @author : Rocks
     * @date :  2023/2/25 22:39
     * @param menu 菜单实体Bean
     * @return Result
     */
    @PostMapping("/saveMenu")
    public Result saveMenu(@RequestBody StarMenuVo menu){
        return menuService.saveOrUpdateMenu(menu)?Result.success():Result.error();
    }

    /**
     * 删除菜单操作
     * @author : Rocks
     * @date :  2023/2/25 22:39
     * @param id 要删除记录的ID
     * @return Result
     */
    @PostMapping("removeMenu")
    public Result removeMenu(String id){
        return Result.result(menuService.removeMenu(id),null, "当前菜单存在有效子菜单，请删除子菜单后重试！");
    }

    /**
     * 根据菜单ID加载对应菜单数据
     * @author : Rocks
     * @date :  2023/2/25 22:40
     * @param id 菜单ID
     * @return Result
     */
    @GetMapping("/loadMenuById")
    public Result loadMenuById(String id){
        return Result.success(menuService.loadMenuById(id));
    }

    /**
     * 根据查询条件加载菜单列表
     * @author : Rocks
     * @date :  2023/2/25 22:41
     * @param search 查询条件
     * @return Result
     */
    @PostMapping("/loadMenuByFid")
    public Result loadMenuByFid(@RequestBody CommonDTO search){
        return Result.success(menuService.loadMenuByFid(search));
    }

    /**
     * 加载当前登录人有权限的菜单
     * TODO 用户组织架构/角色/权限管理以及授权功能开发完成后修改此部分代码
     * @author : Rocks
     * @date :  2023/2/25 22:42
     * @return Result
     */
    @GetMapping("/loadMenuByUser")
    public Result loadMenuByUser(){
        try {
            return Result.success(menuService.loadMenuByUser());
        } catch (BaseException e) {
            log.error("根据用户加载菜单异常", e);
            return Result.error(e.getMessage());
        }
    }

    /**
     * 菜单管理加载全部菜单数据
     * @author : Rocks
     * @date :  2023/2/25 22:43
     * @return Result
     */
    @RequestMapping("/loadAllMenu")
    public Result loadAllMenu(){
        return Result.success(menuService.loadAllMenu());
    }

    /**
     * 查询指定父级下子节点最大排序
     * @author : Rocks
     * @date :  2023/2/25 22:44
     * @param fid 父节点ID
     * @return Result
     */
    @RequestMapping("/getMaxIndex")
    public Result getMaxIndex (String fid) {
        return Result.success(menuService.getMaxIndex(fid));
    }
}
